package com.huang.app.antstore.app;

import android.app.Application;
import android.graphics.Bitmap;

import com.alibaba.android.arouter.launcher.ARouter;
import com.facebook.cache.disk.DiskCacheConfig;
import com.facebook.common.internal.Supplier;
import com.facebook.common.util.ByteConstants;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.cache.MemoryCacheParams;
import com.facebook.imagepipeline.core.ImagePipelineConfig;

import java.io.File;

/**
 * Created by huangxiaoyu on 2017-6-22.
 */

public class MineApplication extends Application {
    static MineApplication instance;
    private static int MAX_MEM = 30 * ByteConstants.MB;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
        ARouter.init(this);
        frescoInit();
    }

    /**
     * fresco 初始化
     */
    private void frescoInit() {
        DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder(this)
                //默认缓存的最大大小。
                .setMaxCacheSize(MAX_MEM)
                //缓存的最大大小,使用设备 时低磁盘空间。
                .setMaxCacheSizeOnLowDiskSpace(MAX_MEM * 2)
                //缓存的最大大小,当设备极低磁盘空间
                .setMaxCacheSizeOnVeryLowDiskSpace(MAX_MEM / 2)
                .setBaseDirectoryName("fresco_cache")
                .setBaseDirectoryPathSupplier(new Supplier<File>() {
                    @Override
                    public File get() {
                        return getApplicationContext().getCacheDir();
                    }
                }).build();
        /**
         * 参数值:1:内存缓存中总图片的最大大小,以字节为单位。
         * 2: 内存缓存中图片的最大数量。
         *  3:内存缓存中准备清除但尚未被删除的总图片的最大大小,以字节为单位。
         *  4:内存缓存中准备清除的总图片的最大数量。
         *   5:内存缓存中单个图片的最大大小。
         */

        final MemoryCacheParams memoryCacheParams = new MemoryCacheParams(MAX_MEM, 100, MAX_MEM / 2, Integer.MAX_VALUE / 3, MAX_MEM / 10);
        Supplier<MemoryCacheParams> supplier = new Supplier<MemoryCacheParams>() {
            @Override
            public MemoryCacheParams get() {
                return memoryCacheParams;
            }
        };
        ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
                .setMainDiskCacheConfig(diskCacheConfig)
                .setBitmapMemoryCacheParamsSupplier(supplier)
                .setDownsampleEnabled(true)
                .setBitmapsConfig(Bitmap.Config.RGB_565)
                .build();
        Fresco.initialize(this, config);
    }

    public static MineApplication getInstance() {
        return instance;
    }
}
